로딩 중이에요... 🐣
[코담]
웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트
26 장고 프로젝트 배포 | ✅ 편저: 코담 운영자
26강 - 장고 프로젝트 배포: Heroku + AWS S3 정적/미디어 파일 연동
배포 - heroku, aws s3✨ 이번 강의 목표
- Django 앱을 Heroku에 배포하여 실제 서비스 운영 환경 구축
- 정적(static) 및 미디어(media) 파일을 AWS S3로 관리하여 효율적인 파일 전송 구성
- 배포 환경에 필요한 설정 및
.env
분리 전략 습득
1. 사전 준비
항목 | 설명 |
---|---|
AWS | S3 버킷 생성, IAM 사용자 생성, 권한 설정 필요 |
Heroku | 회원가입, Heroku CLI 설치, PostgreSQL Add-on 사용 |
로컬 프로젝트 | Django 앱 구조 완성 및 Git 저장소 관리 중일 것 |
2. AWS S3 설정
1) S3 버킷 생성
- 이름: 고유한 이름 (예:
your-project-static
) - 리전:
ap-northeast-2 (서울)
- 퍼블릭 엑세스 허용 설정 (정적 파일만 공개됨)
2) 버킷 정책 예시
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::your-bucket-name/*"]
}
]
}
3) IAM 사용자 생성
- 권한:
AmazonS3FullAccess
- Access Key / Secret 발급 후
.env
또는 Heroku에 등록
3. Django 설정: AWS S3 연동
1) 필요한 패키지 설치
pip install boto3 django-storages
2) settings/production.py 예시
INSTALLED_APPS += ["storages"]
AWS_ACCESS_KEY_ID = env("AWS_ACCESS_KEY_ID")
AWS_SECRET_ACCESS_KEY = env("AWS_SECRET_ACCESS_KEY")
AWS_STORAGE_BUCKET_NAME = env("AWS_STORAGE_BUCKET_NAME")
AWS_S3_REGION_NAME = "ap-northeast-2"
AWS_S3_CUSTOM_DOMAIN = f"{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com"
STATICFILES_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"
DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"
STATIC_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/static/"
MEDIA_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/media/"
4. Heroku 배포 준비
1) 필수 파일 생성
- Procfile
web: gunicorn config.wsgi:application
- runtime.txt
python-3.11.7
- requirements.txt
pip freeze > requirements.txt
2) Heroku CLI로 앱 생성 및 DB 추가
heroku login
heroku create your-app-name
heroku addons:create heroku-postgresql:hobby-dev
5. 환경변수 등록
Heroku에 프로젝트 설정값을 등록합니다.
heroku config:set DJANGO_SETTINGS_MODULE=config.settings.production
heroku config:set DJANGO_SECRET_KEY='복잡한랜덤값'
heroku config:set AWS_ACCESS_KEY_ID='your-access-key'
heroku config:set AWS_SECRET_ACCESS_KEY='your-secret-key'
heroku config:set AWS_STORAGE_BUCKET_NAME='your-bucket-name'
📌 .env
파일 사용 시 django-environ
과 함께 관리할 수 있습니다.
6. Heroku로 배포
git add .
git commit -m "Prepare for Heroku deployment"
git push heroku master # 또는 main
이후 마이그레이션 및 관리자 계정 생성:
heroku run python manage.py migrate
heroku run python manage.py createsuperuser
사이트 접속:
heroku open
✅ 정리
항목 | 설명 |
---|---|
정적/미디어 파일 | AWS S3에 저장되며 브라우저가 직접 로딩 |
서버 실행 | Heroku는 gunicorn 으로 앱 실행 |
DB | PostgreSQL은 자동으로 연결 (DATABASE_URL 환경 변수 기반) |
보안 | 민감한 키 값은 환경 변수로 분리 (.env 또는 config:set ) |
👉 다음 강의에서는 유지보수 전략, 로그 확인, 혹은 모니터링 도구를 활용한 운영 기법을 살펴볼 수 있습니다.